# !/usr/bin python3
# encoding: utf-8 -*-
# @file     : logger.py
# @author   : 沙陌 Matongxue_2
# @Time     : 2023/9/10 16:03
# @Copyright: 北京码同学
import logging.handlers

from paths_manager import project_path


class GetLogger:

    # 整个框架其实只需要一个日志对象即可，可以用单例模式实现
    # 把logger定义成类属性，默认值是None
    logger = None

    # 类方法中完成上面logger属性的实例化过程
    @classmethod
    def get_logger(cls,worker_id='master'):
        if cls.logger is None:
            # 创建日志名称apiautotest,这个值是自定义的
            cls.logger = logging.getLogger('apiautotest')
            # 设置日志级别，debug/info/waring/error/critical
            # 级别从左到右初步升高
            cls.logger.setLevel(logging.DEBUG) # 设置为DEBUG，意味着比他高的级别的日志都会被记录
            # 定义日志的一种格式
            fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d)] - %(message)s"
            fm = logging.Formatter(fmt)

            # 创建日志处理器，把日志存储到文件，按照一定的规则
            tf = logging.handlers.TimedRotatingFileHandler(
                filename=f'{project_path}/logs/requests_{worker_id}.log',
                when='H',# 间隔多长时间去生成新的日志文件，时间单位
                interval=1,# 间隔的时间数量
                backupCount=3,# 除了最新的日志文件外，最多保留3个之前的日志文件
                encoding='utf-8'
            )

            # 将日志输出到控制台上
            logging.basicConfig(level=logging.DEBUG,format=fmt)

            # 在处理器tf中添加格式
            tf.setFormatter(fm)
            # 在日志对象添加处理器
            cls.logger.addHandler(tf)
        return cls.logger

if __name__ == '__main__':
    logger = GetLogger.get_logger() # 得到一个对象
    logger.debug('这是debug日志')
    logger.info('这是info日志')
    logger.warning('这是warning日志')
    logger.error('这是error日志')
    logger.exception('这是异常日志')
    logger.critical('这是critical日志')
